<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>

    <!-- 
      广度优先算法思想
        1.准备两个空的数组容器，一个真实存储节点的数组，一个暂时存储节点的队列数组
        2.将顶点加入到队列中
        3.利用到队列先进先出的特点，将最先加入到队列中的节点删除，并赋值给item
        4.将item加入到nodes
        5.对item的子节点遍历并按顺序加入到queue中
        6.循环重复上面这些操作，直到最后一个节点且没有子节点
     -->
    <script>
      // 广度优先算法
      const abc = (node) => {
        if (!node) return;
        const nodes = [];
        const quene = [];
        // 向队列中添加一个节点
        quene.push(node);
        while (quene.length) {
          // 删除并拿到最先加入到队列中的节点
          let item = quene.shift();
          let children = item.children;
          // 将这删除的节点加入nodes中
          nodes.push(item);
          for (var i = 0; i < children.length; i++) {
            // 对顶点的每一项子节点加入到队列中
            quene.push(children[i]);
          }
        }
        return nodes;
      };
      // 深度优点算法
      function deep(node, nodes = []) {
        if (!node) return;
        nodes.push(node);
        let children = node.children;
        for (var i = 0; i < children.length; i++) {
          deep(children[i], nodes);
        }
        return nodes;
      }

    </script>
  </body>
</html>
